================================================================================
  INFSP6 - INFORM IN SPANISH - Patch List - DocR 809.1
================================================================================
(este documento no usa vocales acentuadas)

Retoques minimos que necesita la libreria para funcionar adecuademante
segun alguna necesidad especifica de algun autor de aventuras.

Para ver mas parches puedes consultar la lista de la comunidad inglesa en:
http://www.inform-fiction.org/patches/library.html

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

[1] - EL PARSER IMPRIME EN PARENTESIS SUS DEDUCCIONES...

>examina kryss
(Kryss)
Tan hermosa como siempre

*** Ir a 'parserm.h' y ubicarse cerca de la linea 1870:
---------------------------------------------------------------------------
! ...explain any inferences made (using the pattern)...

if (inferfrom ~= 0) {
  print "("; PrintCommand(inferfrom); print ")^";
}
---------------------------------------------------------------------------

*** Cambiarla por esto:
---------------------------------------------------------------------------
! ...explain any inferences made (using the pattern)...
#ifdef IMPRIMIR_DEDUCCIONES; !infsp hack
if (inferfrom ~= 0) {
  print "("; PrintCommand(inferfrom); print ")^";
}
#endif;! infsp hack
---------------------------------------------------------------------------

Listo, con esto deberia andar. Para re-activar las deducciones, debes
declarar la constante IMPRIMIR_DEDUCCIONES en algun lugar, por ejemplo
al principio de parserm.h

Otra opcion, aportada por Mel Hython, es simplemente comentar las lineas
del 'if', dejando sin efecto la impresion de deducciones.

- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

[2] - EL OBJETO 'LIBRARYMESSAGES' NO SETEA 'LM_O' ANTE LA ACCION 'TAKE'...

Object LibraryMessages
  with
    before [;
      Take:
        if (lm_n == 1) { "Recoges ", (the) lm_o, "."; }
    ];

En INFSP6, un codigo como el de este ejemplo mostrara un mensaje incorrecto,
algo parecido a "Recoges nada", y una serie de textos de warning del parser.
Esto se produce porque, al contrario de InformATE!, la accion TAKE de INFSP6
nunca le pasa a la rutina L__M() [la que imprime los mensajes por defecto
de la libreria] el objeto ('noun') sobre el cual se realiza dicha accion.
En consecuencia, la variable 'lm_o' siempre tendra un valor nulo en una
accion TAKE (ocurre solo en esta accion) y no servira para ocuparla en
la impresion de mensajes personalizados, como en el ejemplo.

Existes tres formas de solucionar esto:

FORMA 1:
--------
Esta es la mas sencilla y, en la practica, no deberia fallar...
Consiste simplemente en no usar 'lm_o' y en su lugar ocupar 'noun'.
Esta solucion la aporto Mel Hython.

FORMA 2:
--------
Esta implica un 'hackeo'. Consiste en modificar la rutina TakeSub() ORIGINAL
en el archivo 'verblibm.h'. Hay que ubicarse cerca de la linea 1540...

*** La ultima linea de la rutina TakeSub() pone:
      L__M(##Take, 1);

*** Cambiarla por esto:
      L__M(##Take, 1, noun);

FORMA 3:
--------
Esta consiste en reimplementar la rutina TakeSub() en el propio codigo
de la aventura y asi no se debe hackear nada. Para lograrlo, se debe
copiar el siguiente codigo despues de incluir el Parser:

---------------------------------------------------------------------------
Replace TakeSub;
[ TakeSub;
    if (onotheld_mode == 0 || noun notin player)
        if (AttemptToTakeObject(noun)) rtrue;
    if (AfterRoutines() == 1) rtrue;
    notheld_mode = onotheld_mode;
    if (notheld_mode == 1 || keep_silent == 1) rtrue;
    L__M(##Take, 1, noun); ! *** HACK: PASAMOS EL OBJETO ('noun') ***
];
---------------------------------------------------------------------------

Aplicando las soluciones 2 o 3, ya se puede ocupar sin ningun problema
la variable 'lm_o' en un mensaje personalizado para la accion TAKE,
mediante el objeto 'LibraryMessages'.
(Eliuk Blau)

- Fin del Documento -
